package edu.neu.swc.cloud.dao;

import edu.neu.swc.cloud.domain.FacOrder;
import edu.neu.swc.cloud.domain.Order;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


@Mapper
public interface OrderDao {

    /**
     * 找到所有的订单信息
     * @return
     */
    List<Order> findAll();

    /**
     * 依据ID寻找订单
     * @param ord_id
     * @return
     */
    Order findOrdById(int ord_id);

    /**
     *中标操作，经销商选择一家工厂中标
     * @param facOrder
     */
    void addFacOrd(FacOrder facOrder);

    /**
     * 依据中标订单号删除标书中其他标书信息
     * @param ord_id
     */
    void setOtherDisable(int ord_id);

    /**
     * 依据订单编号修改订单状态
     * @param ord_id
     */
    void setHitById(int ord_id);

    /**
     * 依据所属工厂的编号寻找订单信息
     * @param fac_id
     * @return
     */
    List<Order> findOrdByFacId(int fac_id);

    /**
     * 添加新订单
     * @param order
     */
    void addOrder(Order order);

    /**
     * 修改订单
     * @param order
     */
    void updateOrder(Order order);

    /**
     * 依据订单编号删除订单
     * @param ord_id
     */
    void deleteOrderById(int ord_id);

    /**
     * 发布订单信息
     * @param ord_id
     */
    void releaseById(int ord_id);

    /**
     * 依据订单ID结束订单
     * @param ord_id
     */
    void endById(int ord_id);

    /**
     * 多字段查询订单信息
     * @param order
     * @return
     */
    List<Order> findOrdByCon(Order order);

    /**
     * 找到所有可选订单
     * @return
     */
    List<Order> findOrdAva();

    /**
     * 依据订单编号开始生产订单，改变订单状态
     * @param plan_ord_id
     */
    void start(int plan_ord_id);

    /**
     * 按照订单ID进行发货
     * @param ord_id
     */
    void transportById(int ord_id);

    /**
     * 依据条件查找已发布的订单
     * @param order
     * @return
     */
    List<Order> findOrdAvaByCon(Order order);

    /**
     * 获取订单总数
     * @param ord_code
     * @return
     */
    int getOrderCounts(@Param("ord_code") String ord_code);

    /**
     * 获取订单列表
     * @param ord_code
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Order> findOrdByQuery(@Param("ord_code") String ord_code,
                               @Param("pageStart") int pageStart,
                               @Param("pageSize") int pageSize);

    /**
     * 依据订单编号结束排产
     * @param ord_id
     */
    void endPlanById(int ord_id);

    /**
     * 获取订单数目
     * @param ord_code
     * @param fac
     * @return
     */
    int getMyOrderCounts(@Param("ord_code") String ord_code,
                         @Param("fac") int fac);

    /**
     * 获取我的订单
     * @param ord_code
     * @param fac
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Order> findMyOrdByQuery(@Param("ord_code") String ord_code,
                                 @Param("fac") int fac,
                                 @Param("pageStart") int pageStart,
                                 @Param("pageSize") int pageSize);

    /**
     * 找到发布订单的数目
     * @param ord_code
     * @return
     */
    int getReleasedOrderCounts(@Param("ord_code") String ord_code);

    /**
     * 找到发布订单的列表
     * @param ord_code
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Order> findReleasedOrderByQuery(@Param("ord_code") String ord_code,
                                         @Param("pageStart") int pageStart,
                                         @Param("pageSize") int pageSize);
}
